//: Playground - noun: a place where people can play

import UIKit


// @escaping
// 逃逸的
// 如果闭包是在另一个闭包中执行的， 需要使用 @escaping 修饰

// 闭包类型 （_ 参数列表）-> (返回值类型)
// _ 的意思是“不是外部参数”
class HttpUtils {
    func loadData(_ finishedCallback : @escaping (_ jsonData : String) -> ()) {
        // 发送异步请求
        DispatchQueue.global().async {
            print("发送异步网络请求 : \(Thread.current)")
	            // 回到主线程
            DispatchQueue.global().sync {
                print("回到主线程\(Thread.current)")
                finishedCallback("Json字符串")
            }
        }
    }
}

var httpUtils : HttpUtils?
httpUtils = HttpUtils()

httpUtils?.loadData({ (jsonData : String) in
    print("回调的数据：\(jsonData)")
})

// 尾随闭包
// 如果在函数中，闭包是最后一个参数，那么可以写成尾随闭包 (闭包内容写在小括号外)
// 如果闭包是唯一参数，也可以省略小括号
httpUtils?.loadData() { (jsonData : String) in
    print("回调的数据：\(jsonData)")
}

